import java.util.HashMap;
import java.util.HashSet;

public class MST0105 {
    /**
     * 面试题 01.05. 一次编辑
     * 字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串，编写一个函数判定它们是否只需要一次(或者零次)编辑。
     * 示例 1:
     * 输入:
     * first = "pale"
     * second = "ple"
     * 输出: True
     * 输入:
     * first = "pales"
     * second = "pal"
     * 输出: False
     */


        public boolean oneEditAway(String first, String second) {

            //一开始没有考虑字符串有顺序，想利用set集合，判断重复元素多出的个数，来完成。
            if (first == null || second == null) {
                return false;
            }
            int len1 = first.length();
            int len2 = second.length();
            if (Math.abs(len1 - len2) > 1) {
                return false;
            }
            if (len2 > len1) {
                return oneEditAway(second, first);
            }

            // 保持第一个比第二个长
            for (int i = 0; i < len2; i++){
                if (first.charAt(i) != second.charAt(i)){
                    // 如果是长度相同字符串，那就比较下一个，如果长度不一样，那就从该字符开始进行比较。
                    return first.substring(i + 1).equals(second.substring(len1 == len2 ? i + 1 : i));
                }
            }
            return true;
        }


}
